#ifndef YK_COMPARISON_H
#define YK_COMPARISON_H

#include <QWidget>
#include <QJsonArray>
#include <QVector>
#include <QMap>
#include <utility>

#include "search_tree_widget.h"
namespace Ui
{
    class YKComparison;
}

// 遥控项结构体
struct YKItem
{
    int commonAddress;          // 公共地址
    qint64 timestamp;           // 时间戳
    int tieIdentificationIndex; // 遥控标识索引
    QString tieIdentification;  // 遥控标识
    int causeIndex;             // 原因索引
    QString cause;              // 原因
    int pointAddress;           // 点地址
    int value;                  // 值
    int iv;                     // S/E
    int direction;              // 方向 0: Up 1: Down
};

Q_DECLARE_METATYPE(YKItem)

class YKComparison : public QWidget
{
    Q_OBJECT

public:
    explicit YKComparison(SearchTreeWidget *search_tree, QWidget *parent = nullptr);
    ~YKComparison();

protected:
    void showEvent(QShowEvent *event) override;

private slots:
    /**
     * 点击启动按钮
     */
    void onLaunchBtnClicked();

    /**
     * 开始对比
     */
    void onStartComparison();

    /**
     * @brief 网络消息处理函数
     * @param method 方法
     * @param body 消息体
     */
    void onNetworkMessageReceived(const QString &method, const QString &body);

    /**
     * 数据更新
     */
    void onDataUpdated();

    /**
     * @brief 表格单元格点击处理函数
     * @param row 行号
     * @param column 列号
     */
    void onTableItemClicked(int row, int column);

    void on_exportBtn_clicked();

private:
    /**
     * @brief 渲染TED内容
     * @param row 选中的行号
     */
    void renderTEDContent(int row);

private:
    Ui::YKComparison *ui_;
    SearchTreeWidget *search_tree_;
    DealerHandler *dealer_handler_;
    // 存储点地址列表，为接收到数据的时间顺序
    QVector<int> point_address_list_;
    // 存储点地址和对应的d5000_items和generation_items, 分组依据为point_address
    QMap<int, std::pair<QVector<YKItem>, QVector<YKItem>>> point_address_group_;

    bool is_comparing_ = false;
};

#endif // YK_COMPARISON_H
